/** 
 *  @file
 *  @brief   20个节点37杆件连接桁架结构
 *  @author  lijiayang
 *  @date    2024.05.08
 *  @version  v1.0
 *  @par Copyright(c):  ShenGong  Simulation corporation
 */

#pragma once
#include "DBManager/Database/DatabaseFactory.h"
#include "DBManager/DBServiceFactory.h"

#include "DBManager/IService/Input/Node/INodeService.h"
#include "DBManager/IService/Input/Element/IElementService.h"
using SG::DataStructure::FEM::DOFDirections;
using namespace SG::DBManager;
extern std::shared_ptr<DBServiceFactory> DB_SERVICEFACTORY;
/// 桁架模型数据
class Link_TwentyTruss
{
public:
    Link_TwentyTruss()
    {
        DB_SERVICEFACTORY -> ClearDatabase();
        Input (DB_SERVICEFACTORY);
    }

    /// @brief 写入模型数据
    void        Input (const DBServiceFactorySP dbServiceFactory);
    DBServiceFactorySP GetModel () {return DB_SERVICEFACTORY;}

private:
    DBServiceFactorySP m_dbServiceFactory;
};

void Link_TwentyTruss::Input (const DBServiceFactorySP dbServiceFactory)
{
    // 节点写入
    SG::DataStructure::FEM::NodeData node;
        node.m_id = 1;
        dbServiceFactory ->get<INodeService>() ->Add  (node);
        node.m_id = 2;
        dbServiceFactory ->get<INodeService>() ->Add  (node);
        node.m_id = 3;
        dbServiceFactory ->get<INodeService>() ->Add  (node);
        node.m_id = 4;
        dbServiceFactory ->get<INodeService>() ->Add  (node);
        node.m_id = 5;
        dbServiceFactory ->get<INodeService>() ->Add  (node);
        node.m_id = 6;
        dbServiceFactory ->get<INodeService>() ->Add  (node);
        node.m_id = 7;
        dbServiceFactory ->get<INodeService>() ->Add  (node);
        node.m_id = 8;
        dbServiceFactory ->get<INodeService>() ->Add  (node);
        node.m_id = 9;
        dbServiceFactory ->get<INodeService>() ->Add  (node);
        node.m_id = 10;
        dbServiceFactory ->get<INodeService>() ->Add  (node);
        node.m_id = 11;
        dbServiceFactory ->get<INodeService>() ->Add  (node);
        node.m_id = 12;
        dbServiceFactory ->get<INodeService>() ->Add  (node);
        node.m_id = 13;
        dbServiceFactory ->get<INodeService>() ->Add  (node);
        node.m_id = 14;
        dbServiceFactory ->get<INodeService>() ->Add  (node);
        node.m_id = 15;
        dbServiceFactory ->get<INodeService>() ->Add  (node);
        node.m_id = 16;
        dbServiceFactory ->get<INodeService>() ->Add  (node);
        node.m_id = 17;
        dbServiceFactory ->get<INodeService>() ->Add  (node);
        node.m_id = 18;
        dbServiceFactory ->get<INodeService>() ->Add  (node);
        node.m_id = 19;
        dbServiceFactory ->get<INodeService>() ->Add  (node);
        node.m_id = 20;
        dbServiceFactory ->get<INodeService>() ->Add  (node);
    // 截面属性写入
    // 写入单元i kmoooo  ii  ikikk
    {
        const auto& rodEleRepository = dbServiceFactory -> get<IElementService>();
        SG::DataStructure::FEM::CRODData rodEle;
        rodEle.m_id = 1;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 1; rodEle.m_g[1] = 2;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 2;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 1; rodEle.m_g[1] = 3;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 3;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 2; rodEle.m_g[1] = 3;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 4;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 2; rodEle.m_g[1] = 4;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 5;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 3; rodEle.m_g[1] = 4;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 6;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 3; rodEle.m_g[1] = 7;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 7;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 4; rodEle.m_g[1] = 7;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 8;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 4; rodEle.m_g[1] = 8;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 9;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 5; rodEle.m_g[1] = 6;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 10;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 6; rodEle.m_g[1] = 7;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 11;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 7; rodEle.m_g[1] = 8;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 12;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 8; rodEle.m_g[1] = 9;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 13;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 9; rodEle.m_g[1] = 10;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 14;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 5; rodEle.m_g[1] = 11;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 15;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 6; rodEle.m_g[1] = 11;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 16;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 6; rodEle.m_g[1] = 12;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 17;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 7; rodEle.m_g[1] = 12;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 18;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 7; rodEle.m_g[1] = 13;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 19;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 8; rodEle.m_g[1] = 13;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 20;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 8; rodEle.m_g[1] = 14;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 21;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 9; rodEle.m_g[1] = 14;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 22;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 9; rodEle.m_g[1] = 15;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 23;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 10; rodEle.m_g[1] = 15;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 24;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 10; rodEle.m_g[1] = 16;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 25;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 11; rodEle.m_g[1] = 12;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 26;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 12; rodEle.m_g[1] = 13;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 27;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 13; rodEle.m_g[1] = 14;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 28;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 14; rodEle.m_g[1] = 15;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 29;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 15; rodEle.m_g[1] = 16;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 30;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 13; rodEle.m_g[1] = 17;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 31;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 14; rodEle.m_g[1] = 17;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 32;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 14; rodEle.m_g[1] = 18;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 33;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 17; rodEle.m_g[1] = 18;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 34;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 17; rodEle.m_g[1] = 19;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 35;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 18; rodEle.m_g[1] = 19;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 36;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 18; rodEle.m_g[1] = 20;
        rodEleRepository->Add (rodEle);

        rodEle.m_id = 37;
        rodEle.m_pId = 1;
        rodEle.m_g[0] = 19; rodEle.m_g[1] = 20;
        rodEleRepository->Add (rodEle);
    }
    // 节点固定约束
}